﻿/**************************************************************
 *
 * 唯一标识：4527e7fd-7be6-4db1-be23-48709c098faa
 * 命名空间：Sgr.Utilities
 * 创建时间：2023/8/28 18:21:28
 * 机器名称：DESKTOP-S0D075D
 * 创建者：antho
 * 电子邮箱：fengqinhua2016@163.com
 * 描述：
 *
 **************************************************************/

//using Sgr.Utilities;
//using SkiaSharp;

//namespace Sgr.Indentity.Utilities
//{
//    public static class CaptchaHelper
//    {
//        /// <summary>
//        /// 生成验证码（可能包含数字和字母）
//        /// </summary>
//        /// <param name="length"></param>
//        /// <param name="useNum"></param>
//        /// <param name="useLetter"></param>
//        /// <returns></returns>
//        public static (string code, byte[] image) CreateCaptcha(int length = 4, bool useNum = true, bool useLetter = true)
//        {
//            var captchaCode = RandomHelper.GetRandomString(length, useNum, false, useLetter, false);
//            return CreateCaptchaCode(captchaCode);
//        }

//        /// <summary>
//        /// 生成验证码Code
//        /// </summary>
//        /// <param name="code"></param>
//        /// <returns></returns>
//        public static string BuildCaptchaCode(string code)
//        {
//            return HashHelper.CreateMd5($"sgr-{code.ToLower()}-captcha-{DateTime.UtcNow.ToShortDateString()}");
//        }

//        /// <summary>
//        /// 生成验证码(算术计算)
//        /// </summary>
//        /// <returns></returns>
//        public static (string code, byte[] image) CreateArithmeticCaptcha()
//        {
//            //char[] operators = { '+', '-', '*' };
//            //int first = RandomHelper.GetRandom(1, 9);
//            //int second = RandomHelper.GetRandom(1, 9);

//            char[] operators = { '+', '-' };
//            int first = RandomHelper.GetRandom(1, 99);
//            int second = RandomHelper.GetRandom(1, 99);

//            char operatorChar = operators[RandomHelper.GetRandom(0, operators.Length)];
//            int value;
//            switch (operatorChar)
//            {
//                case '+':
//                    value = first + second; break;
//                case '*':
//                    value = first * second; break;
//                case '-':
//                    if (first < second)
//                    {
//                        (second, first) = (first, second);
//                    }
//                    value = first - second;
//                    break;

//                default:
//                    throw new ArgumentException();
//            }

//            string code = $"{first}{operatorChar}{second}=?";

//            var result = CreateCaptchaCode(code);
//            return (value.ToString(), result.imageBytes);
//        }

//        private static (string code, byte[] imageBytes) CreateCaptchaCode(string code)
//        {
//            const int width = 150;
//            const int height = 50;

//            // 创建bitmap位图
//            using var image = new SKBitmap(width, height, SKColorType.Bgra8888, SKAlphaType.Premul);
//            using var canvas = new SKCanvas(image);

//            // 填充背景颜色为白色
//            canvas.Clear(SKColors.White); // 比 DrawColor 更高效 canvas.DrawColor(SKColors.White);

//            // 画图片的背景噪音线
//            using (var noisePaint = new SKPaint())
//            {
//                var noiseLineCount = (int)(width * height * 0.015);

//                for (int i = 0; i < noiseLineCount; i++)
//                {
//                    //noisePaint.Color = new SKColor((uint)RandomHelper.GetRandom(int.MaxValue));
//                    int r = RandomHelper.GetRandom(0, 200);
//                    int g = RandomHelper.GetRandom(0, 200);
//                    int b = RandomHelper.GetRandom(0, 200);
//                    noisePaint.Color = new SKColor((byte)r, (byte)g, (byte)b);
//                    canvas.DrawLine(
//                        RandomHelper.GetRandom(width),
//                        RandomHelper.GetRandom(height),
//                        RandomHelper.GetRandom(width),
//                        RandomHelper.GetRandom(height),
//                        noisePaint);
//                }
//            }

//            // 将文字写到画布上
//            using var textPaint = new SKPaint
//            {
//                Color = SKColors.Red,
//                IsAntialias = true,
//                StrokeWidth = 1
//            };

//            // 计算合适的字体大小 - 使用简单的比例计算而不是复杂的测量
//            float fontSize = Math.Min(height * 0.85f, width / (code.Length * 0.7f));
//            using var font = new SKFont(SKTypeface.Default, fontSize)
//            {
//                Edging = SKFontEdging.SubpixelAntialias
//            };

//            // 简单计算垂直居中位置 - 避免使用FontMetrics的额外开销
//            float centerY = height * 0.8f;  // 经验值，通常字体基线在高度的65%处视觉效果较好

//            // 绘制文本 - 使用画布中心点
//            canvas.DrawText(code, width * 0.5f, centerY, SKTextAlign.Center, font, textPaint);

//            // 画图片的前景噪音点
//            var noisePointCount = (int)(width * height * 0.6);

//            using (var noisePaint = new SKPaint())
//            {
//                for (int i = 0; i < noisePointCount; i++)
//                {
//                    noisePaint.Color = new SKColor((uint)RandomHelper.GetRandom(int.MaxValue));
//                    canvas.DrawPoint(
//                        RandomHelper.GetRandom(width),
//                        RandomHelper.GetRandom(height),
//                        noisePaint);
//                }
//            }

//            using var img = SKImage.FromBitmap(image);
//            using var imageData = img.Encode(SKEncodedImageFormat.Webp, 80);
//            return (code, imageData.ToArray());
//        }
//    }
//}